package com.sh.data.engine.domain.dataquality.model.domain;

import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
public class DataQualityTableDetail {

    /**
     * 表名
     */
    private String tableName;

    /**
     * 表id
     */
    private Long tableId;

    /**
     * 最近N次任务执行状态和耗时信息
     */
    private List<TimeStatus> timeStatus;

    /**
     * 最近一次任务执行状态
     */
    private Integer nowStatus;

    /**
     * 最近一次任务执行耗时
     */
    private Double nowTime;

    /**
     * 平均任务执行耗时
     */
    private Double averageTime;

    /**
     * 最近一次任务执行的结束时间
     */
    private Date lastTime;

    /**
     * 已配置的规则列表
     */
    private List<DataQualityRuleDetail> ruleDetails;

    @Data
    public static class DataQualityRuleDetail {
        /**
         * 规则名称
         */
        private String ruleName;

        /**
         * 规则模板
         */
        private String templateName;

        /**
         * 规则字段
         */
        private String fieldNames;

        /**
         * 最近一次规则执行开始时间
         */
        private Date lastStartTime;

        /**
         * 最近一次规则执行结束时间
         */
        private Date lastEndTime;

        /**
         * 最近一次规则执行状态
         */
        private Integer lastStatus;

        /**
         * 最近N次规则执行状态和耗时信息
         */
        private List<TimeStatus> timeStatus;

        /**
         * 规则历史执行记录
         */
        private List<DataQualityRuleJobDetail> historyRecords;
    }

    @Data
    public static class TimeStatus {
        private Integer status;
        private Double usedTime;
    }

    @Data
    public static class DataQualityRuleJobDetail {

        /**
         * 规则任务id
         */
        private Long dataQualityJobId;

        /**
         * 规则开始时间
         */
        private Date startTime;

        /**
         * 规则结束时间
         */
        private Date endTime;

        /**
         * 规则执行状态
         */
        private Integer status;

        /**
         * 告警时间
         */
        private Date warnTime;

        /**
         * 告警内容
         */
        private String warnContent;
    }
}
